import httpClient from "@/utils/request";
import type {
  AdminChangePasswordParams,
  BatchUserRoleAssignParams,
  ChangePasswordParams,
  CreateUserParams,
  RoleVO,
  UpdateUserParams,
  UpdateUserStatusParams,
  UserInfoDetailVO,
  UserListParams,
  UserListResult,
  UserRoleAssignParams
} from "./types";

/**
 * 创建用户
 * @param data 用户信息
 */
export function createUser(data: CreateUserParams) {
  return httpClient.post<UserInfoDetailVO>("/auth/register", data);
}

/**
 * 获取用户信息
 * @param userId 用户ID，不传则获取当前用户信息
 */
export function getUserInfo(userId?: string) {
  return userId
    ? httpClient.get<UserInfoDetailVO>(`/system/user/info/${userId}`)
    : httpClient.get<UserInfoDetailVO>("/system/user/current/info");
}

/**
 * 更新当前用户信息
 * @param data 用户信息
 */
export function updateCurrentUserInfo(data: UpdateUserParams) {
  return httpClient.post<UserInfoDetailVO>("/system/user/current/update", data);
}

/**
 * 管理员更新用户信息
 * @param data 用户信息
 */
export async function updateUserInfo(data: UpdateUserParams) {
  return httpClient.post<UserInfoDetailVO>("/system/user/admin/update", data);
}

/**
 * 修改当前用户密码
 * @param data 密码信息
 */
export function changePassword(data: ChangePasswordParams) {
  return httpClient.post<string>("/system/user/current/password/change", data);
}

/**
 * 管理员修改用户密码
 * @param data 密码信息
 */
export function adminChangePassword(data: AdminChangePasswordParams) {
  return httpClient.post<string>("/system/user/admin/password/change", data);
}

/**
 * 更新用户状态
 * @param data 状态信息
 */
export function updateUserStatus(data: UpdateUserStatusParams) {
  return httpClient.post<string>("/system/user/status/update", data);
}

/**
 * 删除用户
 * @param userId 用户ID
 */
export function deleteUser(userId: string) {
  return httpClient.post<string>("/system/user/delete", { userId });
}

/**
 * 批量删除用户
 * @param userIds 用户ID数组
 */
export function batchDeleteUsers(userIds: string[]) {
  return httpClient.post<string>("/system/user/batch/delete", { userIds });
}

/**
 * 获取用户列表
 * @param params 查询参数
 */
export function getUserList(params?: UserListParams) {
  return httpClient.get<UserListResult>("/system/user/list", params);
}

/**
 * 获取用户角色列表
 * @param userId 用户ID
 */
export function getUserRoleList(userId: string) {
  return httpClient.get<RoleVO[]>("/system/user/role/list", { userId });
}

/**
 * 分配用户角色
 * @param data 角色分配信息
 */
export function assignUserRole(data: UserRoleAssignParams) {
  return httpClient.post<string>("/system/user/role/assign", data);
}

/**
 * 批量分配用户角色
 * @param data 批量角色分配信息
 */
export function batchAssignUserRole(data: BatchUserRoleAssignParams) {
  return httpClient.post<string>("/system/user/role/batch/assign", data);
}

/**
 * 移除用户角色
 * @param data 角色移除信息
 */
export function removeUserRole(data: UserRoleAssignParams) {
  return httpClient.post<string>("/system/user/role/remove", data);
}

/**
 * 批量移除用户角色
 * @param data 批量角色移除信息
 */
export function batchRemoveUserRole(data: BatchUserRoleAssignParams) {
  return httpClient.post<string>("/system/user/role/batch/remove", data);
}
